マルチスレッド
マルチスレッド
各スレッドが衝突を起こさないように設計する必要がある。
そのためにスレッドの一覧と各スレッドが行う処理を明確にしマトリクスを作って衝突の可能性のある箇所を洗い出す。
スレッド一覧:
識別子 | スレッド名 | 概要 |
MS | メインスレッド | 親スレッド。全スレッドの親となり、コマンドキューを読んで処理を行う |
AS | 接続受付スレッド | 新規接続を受け付ける |
RS | 受信スレッド | クライアントからの通信を受信する。受信したデータはコマンドキューにためる。(実際のソケット受信はさらに子スレッドが行う) |
SS | 送信スレッド | サーバーから各クライアントへの送信を行う。送信内容はレスポンスキューから読みこむ |
WS | ワールドスレッド | 一定時間ごとにオブジェクト、イベントの動作を行う |
NS | NPCスレッド | 一定時間ごとにNPCの動作を行う |
処理一覧:
処理 | MS | AS | RS | SS | WS | NS | メモ |
データの読み込み(ファイルから) |
○ | - | - | - | - | - | 親のみ |
データの変更(ステータスなど) |
○ | - | - | - | ○ | ○ | 注意 |
通信データの受信 |
- | ○ | ○ | - | - | - | 実際は子スレが受信するので問題なし |
通信データの送信 |
- | - | - | ○ | - | - | OK |
ソケットの生成 |
- | ○ | - | - | - | - | OK? |
ソケットの破棄 |
- | - | - | ○ | - | - | OK? |
コマンドキュー書き込み |
△ | ○ | ○ | - | △ | △ | まだ見えない |
コマンドキュー読み込み |
○ | - | - | - | - | - | OK |
コマンドの解析(と処理呼び出し) |
○ | - | - | - | - | - | 親のみ |
レスポンスキュー書き込み |
○ | - | △ | - | - | - | チャットはRSが直書き? |
レスポンスキュー読み込み |
- | - | - | ○ | - | - | OK |
言語フィルタ適用 |
- | - | ? | ? | - | - | どっちでやるのが良いのだ? |
オブジェクトの変化 |
○ | - | - | - | ○ | - | 注意 |
イベントの変化 |
○ | - | - | - | ○ | - | 注意 |
NPCの動作 |
○ | - | - | - | - | ○ | 注意 |